1 % Generator: GNU source-highlight, by Lorenzo Bettini, http://www.gnu.org/software/src-highlite
3 \mbox{}\textbf{\textcolor{RoyalBlue
}{\#include
}}\
\texttt{\textcolor{Red
}{$<$iostream$>$
}} \\
4 \mbox{}\textbf{\textcolor{RoyalBlue
}{\#include
}}\
\texttt{\textcolor{Red
}{$<$cmath$>$
}} \\
5 \mbox{}\textbf{\textcolor{RoyalBlue
}{\#include
}}\
\texttt{\textcolor{Red
}{$<$map$>$
}} \\
6 \mbox{}\textbf{\textcolor{RoyalBlue
}{\#include
}}\
\texttt{\textcolor{Red
}{$<$queue$>$
}} \\
7 \mbox{}\textbf{\textcolor{RoyalBlue
}{\#include
}}\
\texttt{\textcolor{Red
}{$<$set$>$
}} \\
9 \mbox{}\textbf{\textcolor{Blue
}{using
}}\
\textbf{\textcolor{Blue
}{namespace
}}\ std
\textcolor{BrickRed
}{;
} \\
11 \mbox{}\textbf{\textcolor{Blue
}{typedef
}}\ pair
\textcolor{BrickRed
}{$<$
}\textcolor{ForestGreen
}{double
}\textcolor{BrickRed
}{,
}\
\textcolor{ForestGreen
}{double
}\textcolor{BrickRed
}{$>$
}\ point
\textcolor{BrickRed
}{;
} \\
12 \mbox{}\textit{\textcolor{Brown
}{//Gives\ a\ vector\ of\ adjacent\ nodes\ to\ a\ point
}} \\
13 \mbox{}\textbf{\textcolor{Blue
}{typedef
}}\ map
\textcolor{BrickRed
}{$<$
}\ point
\textcolor{BrickRed
}{,
}\ vector
\textcolor{BrickRed
}{$<$
}point
\textcolor{BrickRed
}{$>$
}\
\textcolor{BrickRed
}{$>$
}\ graph
\textcolor{BrickRed
}{;
} \\
14 \mbox{}\textit{\textcolor{Brown
}{//Edge\ of\ length\ "
{}first"
{}\ that\ arrives\ to\ point\ "
{}second"
{}}} \\
15 \mbox{}\textbf{\textcolor{Blue
}{typedef
}}\ pair
\textcolor{BrickRed
}{$<$
}\textcolor{ForestGreen
}{double
}\textcolor{BrickRed
}{,
}\ point
\textcolor{BrickRed
}{$>$
}\ edge
\textcolor{BrickRed
}{;
}\ \\
17 \mbox{}\textcolor{ForestGreen
}{double
}\
\textbf{\textcolor{Black
}{euclidean
}}\textcolor{BrickRed
}{(
}\textbf{\textcolor{Blue
}{const
}}\ point\
\textcolor{BrickRed
}{\&
}a
\textcolor{BrickRed
}{,
}\
\textbf{\textcolor{Blue
}{const
}}\ point\
\textcolor{BrickRed
}{\&
}b
\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{}\
\textbf{\textcolor{Blue
}{return
}}\
\textbf{\textcolor{Black
}{hypot
}}\textcolor{BrickRed
}{(
}a
\textcolor{BrickRed
}{.
}first
\textcolor{BrickRed
}{-
}b
\textcolor{BrickRed
}{.
}first
\textcolor{BrickRed
}{,
}\ a
\textcolor{BrickRed
}{.
}second
\textcolor{BrickRed
}{-
}b
\textcolor{BrickRed
}{.
}second
\textcolor{BrickRed
}{);
}\textcolor{Red
}{\
}} \\
20 \mbox{}\textcolor{ForestGreen
}{int
}\
\textbf{\textcolor{Black
}{main
}}\textcolor{BrickRed
}{()
}\textcolor{Red
}{\
{} \\
21 \mbox{}\ \
\textcolor{ForestGreen
}{int
}\ casos
\textcolor{BrickRed
}{;
} \\
22 \mbox{}\ \ cin\
\textcolor{BrickRed
}{$>$$>$
}\ casos
\textcolor{BrickRed
}{;
} \\
23 \mbox{}\ \
\textbf{\textcolor{Blue
}{while
}}\
\textcolor{BrickRed
}{(
}casos
\textcolor{BrickRed
}{-\/-)
}\textcolor{Red
}{\
{} \\
24 \mbox{}\ \ \ \ graph\ g
\textcolor{BrickRed
}{;
} \\
25 \mbox{}\ \ \ \
\textcolor{ForestGreen
}{int
}\ n
\textcolor{BrickRed
}{;
} \\
26 \mbox{}\ \ \ \ cin\
\textcolor{BrickRed
}{$>$$>$
}\ n
\textcolor{BrickRed
}{;
} \\
27 \mbox{}\ \ \ \
\textbf{\textcolor{Blue
}{while
}}\
\textcolor{BrickRed
}{(
}n
\textcolor{BrickRed
}{-\/-)
}\textcolor{Red
}{\
{} \\
28 \mbox{}\ \ \ \ \ \
\textcolor{ForestGreen
}{double
}\ x
\textcolor{BrickRed
}{,
}y
\textcolor{BrickRed
}{;
} \\
29 \mbox{}\ \ \ \ \ \ cin\
\textcolor{BrickRed
}{$>$$>$
}\ x\
\textcolor{BrickRed
}{$>$$>$
}\ y
\textcolor{BrickRed
}{;
} \\
30 \mbox{}\ \ \ \ \ \ point\
\textbf{\textcolor{Black
}{p
}}\textcolor{BrickRed
}{(
}x
\textcolor{BrickRed
}{,
}y
\textcolor{BrickRed
}{);
} \\
31 \mbox{}\ \ \ \ \ \
\textbf{\textcolor{Blue
}{if
}}\
\textcolor{BrickRed
}{(
}g
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{count
}}\textcolor{BrickRed
}{(
}p
\textcolor{BrickRed
}{)
}\
\textcolor{BrickRed
}{==
}\
\textcolor{Purple
}{0}\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{}\
\textit{\textcolor{Brown
}{//Si\ no\ está\ todavía
}} \\
32 \mbox{}\ \ \ \ \ \ \ \ vector
\textcolor{BrickRed
}{$<$
}point
\textcolor{BrickRed
}{$>$
}\ v
\textcolor{BrickRed
}{;
} \\
33 \mbox{}\ \ \ \ \ \ \ \ g
\textcolor{BrickRed
}{[}p
\textcolor{BrickRed
}{]}\
\textcolor{BrickRed
}{=
}\ v
\textcolor{BrickRed
}{;
} \\
34 \mbox{}\ \ \ \ \ \ \ \
\textbf{\textcolor{Blue
}{for
}}\
\textcolor{BrickRed
}{(
}graph
\textcolor{BrickRed
}{::
}iterator\ i\
\textcolor{BrickRed
}{=
}\ g
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{begin
}}\textcolor{BrickRed
}{();
}\ i\
\textcolor{BrickRed
}{!=
}\ g
\textcolor{BrickRed
}{.
}\textbf{\textcolor{Black
}{end
}}\textcolor{BrickRed
}{();
}\
\textcolor{BrickRed
}{++
}i
\textcolor{BrickRed
}{)
}\textcolor{Red
}{\
{} \\
35 \mbox{}\ \ \ \ \ \ \ \ \ \
\textbf{\textcolor{Blue
}{if
}}\
\textcolor{BrickRed
}{(
(*}i\textcolor{BrickRed}{).}first\ \textcolor{BrickRed}{!=}\ p\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
36 \mbox{}\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{BrickRed}{(*}i\textcolor{BrickRed}{).}second\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{push$\_$back}}\textcolor{BrickRed}{(}p\textcolor{BrickRed}{);} \\
37 \mbox{}\ \ \ \ \ \ \ \ \ \ \ \ g\textcolor{BrickRed}{[}p\textcolor{BrickRed}{].}\textbf{\textcolor{Black}{push$\_$back}}\textcolor{BrickRed}{((*}i\textcolor{BrickRed}{).}first\textcolor{BrickRed}{);} \\
38 \mbox{}\ \ \ \ \ \ \ \ \ \ \textcolor{Red}{\}} \\
39 \mbox{}\ \ \ \ \ \ \ \ \textcolor{Red}{\}} \\
40 \mbox{}\ \ \ \ \ \ \textcolor{Red}{\}} \\
41 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
43 \mbox{}\ \ \ \ set\textcolor{BrickRed}{$<$}point\textcolor{BrickRed}{$>$}\ visited\textcolor{BrickRed}{;} \\
44 \mbox{}\ \ \ \ priority$\_$queue\textcolor{BrickRed}{$<$}edge\textcolor{BrickRed}{,}\ vector\textcolor{BrickRed}{$<$}edge\textcolor{BrickRed}{$>$,}\ greater\textcolor{BrickRed}{$<$}edge\textcolor{BrickRed}{$>$}\ \textcolor{BrickRed}{$>$}\ q\textcolor{BrickRed}{;} \\
45 \mbox{}\ \ \ \ \textit{\textcolor{Brown}{//Each\ edge\ in\ q\ has\ got\ a\ length\ "{}first"{}\ and\ a\ point\ "{}second"{}.}} \\
46 \mbox{}\ \ \ \ \textit{\textcolor{Brown}{//It\ means\ I\ can\ reach\ point\ "{}second"{}\ which\ is\ "{}first"{}\ meters\ away.}} \\
47 \mbox{}\ \ \ \ \textit{\textcolor{Brown}{//q\ has\ the\ closest\ reachable\ node\ on\ top\ (I\ may\ have\ already\ visited\ it!)}} \\
48 \mbox{}\ \ \ \ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{push}}\textcolor{BrickRed}{(}\textbf{\textcolor{Black}{edge}}\textcolor{BrickRed}{(}\textcolor{Purple}{0.0}\textcolor{BrickRed}{,}\ \textcolor{BrickRed}{(*}g\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{begin}}\textcolor{BrickRed}{()).}first\textcolor{BrickRed}{));} \\
49 \mbox{}\ \ \ \ \textcolor{ForestGreen}{double}\ totalDistance\ \textcolor{BrickRed}{=}\ \textcolor{Purple}{0.0}\textcolor{BrickRed}{;} \\
50 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{while}}\ \textcolor{BrickRed}{(!}q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{empty}}\textcolor{BrickRed}{())}\textcolor{Red}{\{} \\
51 \mbox{}\ \ \ \ \ \ edge\ nearest\ \textcolor{BrickRed}{=}\ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{top}}\textcolor{BrickRed}{();} \\
52 \mbox{}\ \ \ \ \ \ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{pop}}\textcolor{BrickRed}{();} \\
53 \mbox{}\ \ \ \ \ \ point\ actualNode\ \textcolor{BrickRed}{=}\ nearest\textcolor{BrickRed}{.}second\textcolor{BrickRed}{;} \\
54 \mbox{}\ \ \ \ \ \ \textbf{\textcolor{Blue}{if}}\ \textcolor{BrickRed}{(}visited\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{count}}\textcolor{BrickRed}{(}actualNode\textcolor{BrickRed}{)}\ \textcolor{BrickRed}{==}\ \textcolor{Purple}{1}\textcolor{BrickRed}{)}\ \textbf{\textcolor{Blue}{continue}}\textcolor{BrickRed}{;}\ \textit{\textcolor{Brown}{//Ya\ habia\ visitado\ este}} \\
55 \mbox{}\ \ \ \ \ \ totalDistance\ \textcolor{BrickRed}{+=}\ nearest\textcolor{BrickRed}{.}first\textcolor{BrickRed}{;} \\
56 \mbox{}\ \ \ \ \ \ visited\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{insert}}\textcolor{BrickRed}{(}actualNode\textcolor{BrickRed}{);} \\
57 \mbox{}\ \ \ \ \ \ vector\textcolor{BrickRed}{$<$}point\textcolor{BrickRed}{$>$}\ neighbors\ \textcolor{BrickRed}{=}\ g\textcolor{BrickRed}{[}actualNode\textcolor{BrickRed}{];} \\
58 \mbox{}\ \ \ \ \ \ \textbf{\textcolor{Blue}{for}}\ \textcolor{BrickRed}{(}\textcolor{ForestGreen}{int}\ i\textcolor{BrickRed}{=}\textcolor{Purple}{0}\textcolor{BrickRed}{;}\ i\textcolor{BrickRed}{$<$}neighbors\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{size}}\textcolor{BrickRed}{();}\ \textcolor{BrickRed}{++}i\textcolor{BrickRed}{)}\textcolor{Red}{\{} \\
59 \mbox{}\ \ \ \ \ \ \ \ point\ t\ \textcolor{BrickRed}{=}\ neighbors\textcolor{BrickRed}{[}i\textcolor{BrickRed}{];} \\
60 \mbox{}\ \ \ \ \ \ \ \ \textcolor{ForestGreen}{double}\ dist\ \textcolor{BrickRed}{=}\ \textbf{\textcolor{Black}{euclidean}}\textcolor{BrickRed}{(}actualNode\textcolor{BrickRed}{,}\ t\textcolor{BrickRed}{);} \\
61 \mbox{}\ \ \ \ \ \ \ \ q\textcolor{BrickRed}{.}\textbf{\textcolor{Black}{push}}\textcolor{BrickRed}{(}\textbf{\textcolor{Black}{edge}}\textcolor{BrickRed}{(}dist\textcolor{BrickRed}{,}\ t\textcolor{BrickRed}{));} \\
62 \mbox{}\ \ \ \ \ \ \textcolor{Red}{\}} \\
63 \mbox{}\ \ \ \ \textcolor{Red}{\}} \\
64 \mbox{}\ \ \ \ \textbf{\textcolor{Black}{printf}}\textcolor{BrickRed}{(}\texttt{\textcolor{Red}{"{}\%.2f}}\texttt{\textcolor{CarnationPink}{\textbackslash{}n}}\texttt{\textcolor{Red}{"{}}}\textcolor{BrickRed}{,}\ totalDistance\textcolor{BrickRed}{);} \\
65 \mbox{}\ \ \ \ \textbf{\textcolor{Blue}{if}}\ \textcolor{BrickRed}{(}casos\ \textcolor{BrickRed}{$>$}\ \textcolor{Purple}{0}\textcolor{BrickRed}{)}\ cout\ \textcolor{BrickRed}{$<$$<$}\ endl\textcolor{BrickRed}{;}\ \textit{\textcolor{Brown}{//Endl\ between\ cases}} \\
66 \mbox{}\ \ \textcolor{Red}{\}} \\
67 \mbox{}\textcolor{Red}{\}} \\